package com.ynet.middleground.user.service;

import com.ynet.core.common.ServiceResult;
import com.ynet.middleground.user.bean.*;
import com.ynet.middleground.user.dto.*;

import javax.validation.Valid;
import java.util.List;

/**
 * @program: 2019-10-12_userCenter
 * @description: 用户管理模块接口
 * @author: DaiGaoLe
 * @create: 2019-10-23 16:25
 **/
public interface UserService {
    /**
     * @program: 2019-10-12_userCenter
     * @description: 用户信息修改服务
     * @author: DaiGaoLe
     * @create: 2019-10-22 09:34
     **/
    public ServiceResult<String> changeUserInfo(@Valid ChangeUserInfoReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 删除用户服务
     * @author: DaiGaoLe
     * @create: 2019-10-22 11:03
     **/
    public ServiceResult<String> deleteUser(@Valid DeleteUserReq requestObject);

    /**
     * @category 获取邀请码服务
     * @author DaiGaoLe 2019年10月14日
     */
    public ServiceResult<String> getInvitationCode(@Valid InvitationCodeReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 用户信息查看服务
     * @author: DaiGaoLe
     * @create: 2019-10-21 18:20
     **/
    public ServiceResult<List<UserInfoDto>> queryUserInfo(@Valid QueryUserInfoReq requestObject);

    /**
     * 自然人查询
     *
     * @param requestObject
     * @return
     */
    public ServiceResult<List<NaturalPersonDto>> queryNaturalPersonList(@Valid QueryNaturalPersonReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 加解锁定用户服务
     * @author: DaiGaoLe
     * @create: 2019-10-22 14:12
     **/
    public ServiceResult<String> unlockOrLocksUser(@Valid UnlockOrLocksUserReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 用户认证接口
     * @author: DaiGaoLe
     * @create: 2019-10-21 14:19
     **/
    public ServiceResult<String> authenticationService(@Valid UserAuthentication requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 修改/重置密码维护服务
     * @author: DaiGaoLe
     * @create: 2019-10-22 16:30
     **/
    public ServiceResult<String> userPasswordMaintenance(@Valid UserPasswordMaintenanceReq requestObject);

    /**
     * @category 用户注册服务
     * @author DaiGaoLe 2019年10月14日
     */
    public ServiceResult<Integer> registered(@Valid UserRegistrationReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 登录验密请求服务
     * @author: DaiGaoLe
     * @create: 2019-10-22 20:32
     **/
    public ServiceResult<Integer> loginVerification(@Valid LoginVerificationReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 登录验密请求服务
     * @author: DaiGaoLe
     * @create: 2019-10-22 20:32
     **/
    public ServiceResult<ViewArchivesDto> viewArchives(@Valid ViewArchivesReq requestObject);

    /**
     * @param requestObj
     * @return
     * @description 添加企业员工用户
     * @program 2019年11月5日 11:17
     * @author Wangxz
     */
    public ServiceResult<Integer> addEnterpriseUserInfo(@Valid AddEnterpriseUserInfoReq requestObj);


    /**
     * @Description: 渠道用户授权
     * @Param:
     * @return:
     * @Author: DaiGaoLe
     * @Date: 2019/11/12
     */
    public ServiceResult<String> channelUserAuthorization(@Valid ChannelUserAuthorizationReq requestObj);

    /**
     * @Description: 业态用户授权
     * @Param:
     * @return:
     * @Author: SYF
     * @Date: 2022/9/19
     */
    public ServiceResult<String> formatUserAuthorization(@Valid FormatUserAuthorizationReq requestObj);


    /**
     * @Description: 根据手机号获取用户企业名称 和id
     * @Param:
     * @return:
     * @Author: DaiGaoLe
     * @Date:
     */
    public ServiceResult<List<EnterpriseListInfoDto>> pursuantTelephoneGetUserName(@Valid TelephoneGetUserNameReq requestObj);


    /**
     * @Description: 补录邀请码服务
     * @Param:
     * @return:
     * @Author: DaiGaoLe
     * @Date:
     */
    public ServiceResult<String> supplementTheInvitationCode(@Valid SupplementInvitationCode requestObj);


    /**
     * @Description: 根据企业名称查询操作员用户信息及角色
     * @Param: QueryUserInfoReq
     * @return: List<BaseicInfoAndRoleDTO>
     * @Author: SongYiFan
     * @Date: 2020-07-02
     */
    public ServiceResult<List<BaseicInfoAndRoleDTO>> getInfoByUserName(@Valid QueryBaseicInfoAndRoleReq requestObject);

    /**
     * @program: 2019-10-12_userCenter
     * @description: 企业用户信息修改服务
     * @author: Songyf
     * @create: 2020-07-21 16:07
     **/
    public ServiceResult<String> changeBasicInfo(@Valid ChangeUserInfoEnterpriseBasicInfo requestObject);

    /**
     * @Description: 根据邀请码查询邀请信息
     * @Param: QueryUserInfoReq
     * @return: List<BaseicInfoAndRoleDTO>
     * @Author: SongYiFan
     * @Date: 2020-08-03
     */
    public ServiceResult<InviteeInformationDTO> queryInviteeInformation(@Valid QueryInviteeInformationReq requestObject);

    /**
     * @param requestObj
     * @return
     */
    ServiceResult<String> bindDingTalk(@Valid BindDingDingReq requestObj);

    /**
     查询企业四要素、个人两要素修改记录
     */
    ServiceResult<List<FactorsModifyRecordDto>> queryFactorsModifyRecord(@Valid QueryFactorsModifyRecordReq requestObject);
}
